//! Demo模式测试示例
//! 
//! 展示如何使用Demo模式进行模拟交易测试
//! Demo模式使用官方提供的模拟交易环境，支持所有产品线

use binance_sdk_unified::{
    client::BinanceClientBuilder, ProductType, Environment, Result,
};

#[tokio::main]
async fn main() -> Result<()> {
    // 初始化日志
    tracing_subscriber::fmt::init();

    println!("🎯 Demo模式测试");
    println!("================");
    println!("Demo模式是Binance官方提供的模拟交易环境，");
    println!("支持现货、USDT合约、币本位合约等所有产品线");
    println!();

    // 测试所有产品类型的Demo模式
    let product_types = vec![
        (ProductType::Spot, "现货交易"),
        (ProductType::UsdM, "USDT永续合约"),
        (ProductType::CoinM, "币本位合约"),
        (ProductType::Options, "期权"),
        (ProductType::Portfolio, "组合保证金"),
    ];

    for (product_type, description) in product_types {
        println!("🔧 测试 {} Demo模式", description);
        println!("----------------------------------------");
        
        // 创建Demo模式客户端
        let client = BinanceClientBuilder::new(
            "demo_api_key".to_string(),
            "demo_secret_key".to_string(),
            product_type,
        )
        .environment(Environment::Demo)
        .timeout(30)
        .retry_count(3)
        .build()?;

        // 打印配置信息
        println!("   产品类型: {:?}", product_type);
        println!("   环境: Demo");
        println!("   REST URL: {}", client.config().rest_base_url());
        println!("   WebSocket URL: {}", client.config().ws_base_url());
        println!("   API前缀: {}", client.config().product_type.base_api_prefix());
        
        // 添加环境日志
        tracing::info!("[DEMO_MODE] 产品类型: {:?}", product_type);
        tracing::info!("[DEMO_MODE] 环境: Demo");
        tracing::info!("[DEMO_MODE] REST URL: {}", client.config().rest_base_url());
        tracing::info!("[DEMO_MODE] WebSocket URL: {}", client.config().ws_base_url());
        tracing::info!("[DEMO_MODE] API前缀: {}", client.config().product_type.base_api_prefix());

        // 测试公共API
        println!("   📡 测试公共API...");
        
        // 获取服务器时间
        match client.rest().market().get_server_time().await {
            Ok(server_time) => {
                println!("   ✅ 服务器时间: {}", server_time.server_time);
                println!("   ✅ REST API连接成功！");
            },
            Err(e) => {
                println!("   ❌ 获取服务器时间失败: {}", e);
                println!("   ❌ REST API连接失败！");
            }
        }

        // 测试交易对信息
        match client.rest().market().get_exchange_info().await {
            Ok(exchange_info) => {
                println!("   ✅ 交易对数量: {}", exchange_info.symbols.len());
            },
            Err(e) => {
                println!("   ❌ 获取交易对信息失败: {}", e);
            }
        }

        // 测试24小时价格统计
        let symbol = match product_type {
            ProductType::Spot => "BTCUSDT",
            ProductType::UsdM => "BTCUSDT",
            ProductType::CoinM => "BTCUSD_PERP",
            ProductType::Options => "BTC-240329-50000-C",
            ProductType::Portfolio => "BTCUSDT",
        };

        match client.rest().market().get_24hr_ticker(Some(symbol)).await {
            Ok(ticker) => {
                println!("   ✅ {} 24小时价格: {}", symbol, ticker.last_price);
            },
            Err(e) => {
                println!("   ❌ 获取{}价格统计失败: {}", symbol, e);
            }
        }

        println!();
    }

    // 演示如何使用Demo模式进行交易测试
    println!("💡 Demo模式使用说明");
    println!("====================");
    println!("1. Demo模式使用官方模拟交易环境");
    println!("2. 支持所有产品线的完整功能测试");
    println!("3. 无需真实资金，安全进行策略测试");
    println!("4. 数据与实盘同步，但交易为模拟");
    println!();
    
    println!("🌐 Demo模式端点信息:");
    println!("   现货: https://demo-api.binance.com");
    println!("   USDT合约: https://demo-fapi.binance.com");
    println!("   币本位合约: https://demo-dapi.binance.com");
    println!("   期权: https://demo-api.binance.com");
    println!("   组合保证金: https://demo-api.binance.com");
    println!();
    
    println!("🔌 WebSocket端点:");
    println!("   现货: wss://demo-ws-api.binance.com");
    println!("   USDT合约: wss://fstream.binancefuture.com");
    println!("   币本位合约: wss://dstream.binancefuture.com");
    println!("   期权: wss://demo-ws-api.binance.com");
    println!("   组合保证金: wss://demo-ws-api.binance.com");
    println!();

    println!("🎉 Demo模式测试完成！");
    println!("====================");
    println!("💡 提示: 使用Demo模式进行安全的策略测试");
    println!("   export BINANCE_ENVIRONMENT=\"Demo\"");
    println!("   export BINANCE_PRODUCT_TYPE=\"UsdM\"");
    println!("   cargo run --example demo_mode_test");

    Ok(())
}
